#ifndef _CLex_H_
#define _CLex_H_

#include <fstream>
#include <string>

#include "ttoken.h"

class CLex
{
public:
    CLex(std::string const& ff);
    TToken GenToken(std::string& info);
    unsigned int GetLine(void) const {return line;}
  
    // Control de estado
    // > INICIAL < Fuera del cuerpo del sistema L. Los tokens que comienzan por caracter se interpretan como identificadores.
    void StateLSHeader(void);
  
    // Dentro del cuerpo del sistema L. Los tokens que comienzan por caracter se interpretan como antecedentes.
    void StateLSBody(void);
  
private:
    typedef enum  {ID_EXPECTED, ANTEC_EXPECTED} lex_state_type;
  
    lex_state_type lex_state;
    char c;
    unsigned int line;
    std::ifstream file;

    inline void JumpSpaces(void);
};

#endif
